package com.hlj.ncp.warehouse.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hlj.ncp.warehouse.entity.Stock;

import java.math.BigDecimal;
import java.util.List;

/**
 * 库存信息Service接口
 */
public interface IStockService extends IService<Stock> {
    /**
     * 查询库存信息列表
     * 
     * @param stock 库存信息
     * @return 库存信息集合
     */
    List<Stock> selectStockList(Stock stock);

    /**
     * 查询库存信息详细
     * 
     * @param stockId 库存ID
     * @return 库存信息
     */
    Stock selectStockById(Long stockId);

    /**
     * 新增库存信息
     * 
     * @param stock 库存信息
     * @return 结果
     */
    boolean insertStock(Stock stock);

    /**
     * 修改库存信息
     * 
     * @param stock 库存信息
     * @return 结果
     */
    boolean updateStock(Stock stock);

    /**
     * 批量删除库存信息
     * 
     * @param stockIds 需要删除的库存ID
     * @return 结果
     */
    boolean deleteStockByIds(Long[] stockIds);

    /**
     * 删除库存信息信息
     * 
     * @param stockId 库存ID
     * @return 结果
     */
    boolean deleteStockById(Long stockId);
    
    /**
     * 入库操作
     * 
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param quantity 入库数量
     * @param batchNo 批次号
     * @return 结果
     */
    boolean inStock(Long productId, Long warehouseId, BigDecimal quantity, String batchNo);
    
    /**
     * 出库操作
     * 
     * @param stockId 库存ID
     * @param quantity 出库数量
     * @param reason 出库原因
     * @param remark 备注
     * @return 结果
     */
    boolean outStock(Long stockId, Integer quantity, String reason, String remark);
    
    /**
     * 获取总库存价值
     * 
     * @return 总库存价值
     */
    Double getTotalStockValue();
    
    /**
     * 获取库存预警数量
     * 
     * @return 预警库存数量
     */
    long getLowStockCount();
    
    /**
     * 获取缺货商品数量
     * 
     * @return 缺货商品数量
     */
    long getOutOfStockCount();
} 